package factory;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/*
* 创建bean对象的工厂
*   创建service和dao对象的
*
* bean:在计算机英语中,是可重用组件的含义
* javabean 不等于 实体类
* Javabean:用Java语言编写的可重用组件
*
* 1:配置文件配置service和dao
*   配置文件内容:
*       1:唯一标识 = 全限定类名
* 2:读取配置文件,反射创建对象
*
* 配置文件可以是xml也可以是properties
*
* */
public class BeanFactory {

    //定义一个properties对象
    private static Properties properties;

    //使用静态代码块为properties对象赋值
    static {
        //实例化对象
        properties = new Properties();
        //获取properties对象的流对象
        InputStream inputStream = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
        try {
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
            throw new ExceptionInInitializerError("初始化properties失败!");
        }

    }

    /*
    * 根据bean的名称获取bean对象
    * */
    public Object getBean(String beanName){
        Object bean = null;
        try {
            String beanPath = properties.getProperty(beanName);
            bean = Class.forName(beanPath).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return bean;
    }
}
